home *** CD-ROM | disk | FTP | other *** search
/ RISC User... in a Nutshell / RISC User... in a Nutshell.iso / !Nutshell / !OvnPro / Applets / !Cookies / Library / Cookies
Encoding:
Text File  |  1998-07-02  |  3.8 KB  |  196 lines

  1. // Cookies v1.56 (2/7/98)
  2. //
  3. // Inserts a random quote into an Ovation Pro Document
  4. // (this time with desktop interface)
  5. //
  6. // Tony Howat, (c) RISC User 1998
  7.  
  8. int cookie_rnd_seed=1,cookie_count=0;
  9. string cookie_filename;
  10.  
  11. int cookie_handle;
  12. int cookie_status = 0;
  13. int cookie_chosen=0;
  14.  
  15. int cookie_rnd(void)
  16. {
  17.   int result;
  18.   cookie_rnd_seed=(cookie_rnd_seed*1103515245)+12345;
  19.   result=cookie_rnd_seed >> 16;
  20.   if(result<0)
  21.     result=0-result; /* get rid of any negative results */
  22.   return(result);
  23. }
  24.  
  25. int cookie_count_cookies(void)
  26. {
  27.   int file;
  28.   string error;
  29.  
  30.   file=fileopen(cookie_filename,"r");
  31.  
  32.   if(!file)
  33.   {
  34.     error="{COOKIES_NOFILE}"+" ("+cookie_filename+")";
  35.     errorbox(error);
  36.   } else {  
  37.     // now scan through the file looking for nulls
  38.   
  39.     while(!fileeof(file))
  40.     {
  41.       if(filegetc(file)==0)
  42.         ++cookie_count;
  43.     }
  44.   
  45.     fileclose(file);
  46.   }
  47. }
  48.  
  49. int cookies_message(int write)
  50. {
  51.   int file, firstchar=0xff, c=0, dispcharcount=0;
  52.   string error, displaycookie, writecookie;
  53.  
  54.   file=fileopen(cookie_filename,"r");
  55.   
  56.   if(!file)
  57.   {
  58.     error="{COOKIES_NOFILE}"+" ("+cookie_filename+")";
  59.     errorbox(error);
  60.     return 0;
  61.   }
  62.  
  63.   if(cookie_count)
  64.   {
  65.     if(!write)
  66.     {
  67.       cookie_rnd_seed = (clock() * 4267) & 0xffffffff;
  68.       cookie_chosen=cookie_rnd();
  69.       cookie_chosen=cookie_chosen % cookie_count;
  70.       c=0;
  71.     }
  72.   
  73.     // now scan through the file looking for our cookie
  74.   
  75.     while((!fileeof(file)) && (c!=cookie_chosen))
  76.     {
  77.       if(filegetc(file)==0)
  78.         ++c;
  79.     }
  80.   
  81.     if(cookie_chosen!=0)
  82.       filereads(displaycookie,file); // skip leading newline
  83.  
  84.     displaycookie="";
  85.     writecookie="";
  86.  
  87.     firstchar=10;
  88.  
  89.     while(firstchar!=0)
  90.     {
  91.       firstchar=filegetc(file);
  92.       if(firstchar!=0)
  93.       {
  94.         string s;
  95.         s=chars(firstchar);   
  96.         if(write)
  97.           writecookie+=s;
  98.         if(firstchar!=10 && s!="\t" && dispcharcount<255)
  99.         {
  100.           displaycookie+=s;
  101.           dispcharcount++;         
  102.         } else {
  103.           if((firstchar==10 || s=="\t") && dispcharcount<255)
  104.           {
  105.             displaycookie+=" ";
  106.             dispcharcount++;
  107.           }
  108.         }
  109.       }
  110.     }
  111.  
  112.     // add dots if our length was greater than our (self imposed) icon limit
  113.     if(dispcharcount>=255)
  114.     {
  115.       displaycookie=mids(displaycookie,0,252);
  116.       displaycookie+="...";
  117.     }
  118.  
  119.     if(write)
  120.       type(writecookie);
  121.     writeicon(cookie_handle, 0, "");
  122.     refresh_icon(0, cookie_handle, 0);
  123.     writeicon(cookie_handle, 0, displaycookie);
  124.   }
  125.  
  126.   fileclose(file);
  127.  
  128.   return(0);
  129. }
  130.  
  131. // deal with 'cookies' menu entry
  132.  
  133. int cookies_entry(int entry, int subcode)
  134. {
  135.  cookie_status = !cookie_status;
  136.  if(cookie_status)
  137.  {
  138.   display_window(cookie_handle, 0, 1);
  139.   cookies_message(0);
  140.  }
  141.  else
  142.   close_window(cookie_handle);
  143.  
  144.  return(0);
  145. }
  146.  
  147. // tick or un-tick 'cookies' menu entry
  148.  
  149. int cookies_flags(int entry, string &text)
  150. {
  151.  return(cookie_status);
  152. }
  153.  
  154. // handler for mouse clicks in cookies box
  155.  
  156. void cookies_clicknext(int handle,int icon,int bits,int mx,int my)
  157. {
  158.  if(icon == 4)
  159.   cookies_message(0);
  160.  if(icon == 5)
  161.   cookies_message(1);
  162. }
  163.  
  164. // handler for cookies window close icon
  165.  
  166. void cookies_closebox(int handle)
  167. {
  168.  close_window(handle);
  169.  cookie_status = 0;
  170. }
  171.  
  172. // add our option to the applet menu
  173.  
  174. void main(void)
  175. {
  176.   script_menu_initialise();
  177.  
  178.   addentry_menu(script_handle,"cookies_entry","cookies_flags","","","{COOKIES_00}");
  179.  
  180.   cookie_handle = create_window("cook_main");
  181.   addwindowhandler(0,cookie_handle,"cookies_clicknext");
  182.   addwindowhandler(2,cookie_handle,"cookies_closebox");
  183.  
  184.   addeventhandler(0x004, 0, "cookies_quit");
  185.  
  186.   cookie_filename="OvationPro$AppletsDir";
  187.   getenvs(cookie_filename);
  188.   cookie_filename+=".!Cookies.AResources.Cookies";
  189.   
  190.   cookie_count_cookies();
  191.  
  192.   cookie_rnd_seed = (clock() * 4267) & 0xffffffff;
  193.   cookie_chosen=cookie_rnd();
  194.   cookie_chosen=cookie_chosen % cookie_count;
  195. }
  196.